package com.mybatis.config;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;

public class SqlSessionFactoryUtils {
    private static SqlSessionFactory SQL_SESSION_FACTORY = null;

    public static SqlSessionFactory getInstance() {
        if (SQL_SESSION_FACTORY == null) {
            try {
                SQL_SESSION_FACTORY = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return SQL_SESSION_FACTORY;
    }


    //    set  【完成】
    //    <choose> <when> ...<otherwise>  [类似于if(){}  else if(){} else{}]     【完成】
    //    mybtis用到了动态代理了吗？
    //   使用foreach循环批量插入数据时，@Param的作用是什么，为什么要用这个注解。  解释： @Param的作用是给参数取别名，自己起的变量名失效了，使用系统默认的变量名，导致无法传递到mapper的sql文件中，因此要使用@param注解重新起别名。
    //   foreach 中的collection属性是什么意思.  解释：指定参数类型，可以是类型list，map，数组，字符串等。也可以使用@Param注解指定别名。
    //   如果指定了别名，那么collection属性的赋值时就要用别名了，否则就会出错。


    // 一对一查询
    // 一对多查询
    // mybatis一级缓存和二级缓存

}
